This invention relates to electronic programmable controllers for operating industrial equipment and, more particularly, to a programming interface used to develop control programs performed by industrial controllers to control industrial equipment.
Programmable controllers are well known systems for operating industrial equipment, such as assembly lines and machine tools, in accordance with a stored program. In these controllers, a stored program is executed to examine the condition of specific sensing devices on the controlled equipment, and to energize or de-energize selected operating devices on that equipment contingent upon the status of one or more of the examined sensing devices. The program not only manipulates single bit input and output data representing the state of the sensing and operating devices, but also performs arithmetic operations, timing and accounting functions, and more complex processing operations.
One industry which extensively uses programmable controllers is the automotive industry. In the automotive industry, various automotive parts are conveyed along machine lines consisting of many consecutive work stations, most work stations including at least one tool which performs some function to alter the characteristics of work pieces as they are delivered to the station. For example, an unfinished cast engine block that requires a plurality of holes, bores, and threads, as well as other metal removing procedures, may be provided at the beginning of a machine line that produces finished engine blocks. The machine line may consist of any number of different stations, each station performing a different procedure on the unfinished block. An indexer in the form of a transfer bar can be arranged to move each block from one station to the next following a completed process. Typically, at each station the block would be clamped prior to any metal removing operation.
In this type of a system, a programmable controller would receive inputs from all of the various tools at all of the work stations and would provide activating output signals to synchronize machine operation. During metal removing periods with the transfer bar out of the way, all of the tools would perform their functions. In between metal removing periods during transfer periods, the tools would be parked, the clamps un-clamped, and the transfer bar would advance work pieces from one station to the next.
Industrial controllers are frequently programmed in "relay ladder" language (RLL) where instructions are represented graphically by "contacts" and "coils" of virtual relays connected and arranged in ladder-like rungs across power and ground rails. RLL, with its input contacts and output coils, reflects the emphasis in industrial control on the processing of large amounts of input and output data.
RLL also reflects the fact that most industrial control is "real time"; that is, an ideal industrial controller behaves as if it were actually composed of multiple relays connected in parallel rungs to provide outputs in essentially instantaneous response to changing inputs. Present industrial controllers do not, in fact, employ separate parallel relay-like structures, but instead simulate the parallel operation of the relays by means of a conventional Von-Neumann type computer processor which executes instructions one at a time, sequentially. The practical appearance of parallel operation is obtained by employing extremely fast processors in the execution of the sequential control program.
As each rung is executed, inputs represented by the contacts are read from memory (as obtained from inputs from the controlled process or the previous evaluation of coils of other rungs). These inputs are evaluated according to the logic reflected in the connection of the contacts into one or more branches within the rungs. Contacts in series across a rung represent boolean AND logic whereas contacts in different branches and thus in parallel across the rung represent boolean OR logic.
Typically a single output coil at the end of each rung is set or reset and based on the evaluation of that rung this setting or resetting is reflected in the writing to memory of a bit (which ultimately becomes an output to the industrial process or to another RLL rung).
Once the given rung is evaluated, the next rung is evaluated and so forth. In the simplest form of RLL programming, there are no jumps, i.e. all rungs are evaluated in a cycle or "scan" through the rungs. This is in contrast to conventional computer programming, where branch and jump instructions cause later instructions or groups of instructions to be skipped depending on the outcome of a test associated with those branch or jump instructions.
While RLL is well suited for controlling industrial processes like those in the automotive industry, RLL programming is not an intuitive process and therefore requires highly skilled programmers. Where hundreds of machine tool movements must be precisely synchronized to provide a machining process, programming in RLL is extremely time consuming. The time and relative skill associated with RLL programming together account for an appreciable percentage of overall costs associated with a control system. In addition, the final step in RLL programming is typically a lengthy debugging and reworking step which further adds to overall system costs.
One way to streamline any type of programming is to provide predefined language modules which can be used repetitively each time a specific function is required. Because of the similar types of tools and movements associated with different machine line stations, industrial control would appear to be an ideal industry for such language modules. For example, various stations in a single machine line could employ drilling tools having identical limiting motion and configuration parameters.
In this case the idea would be to design a ladder logic language module for a drill once, place the drill language module into a control library and thereafter, each time drill logic is required, download the drill language module into a control program. Similarly, language modules for other types of tools could be designed once and then used repetitively to reduce programming and debugging time. The module library could be expanded until virtually all tool movements are represented. Library components would be viewed as "black boxes" with predefined interfaces, in much the same way that integrated circuits are used in the electronics industry.
In addition, to make it easier to program in RLL, a comprehensive module library would also facilitate automated RLL programming using a programming editor. For example, an entire module library could be stored in the memory of an electronic editing apparatus. Using the apparatus, a user could designate all characteristics of a machine. Thereafter, using the designated characteristics, the apparatus could select language modules from the module library and assemble an RLL program to control the machine.
The module library approach would work quite well for certain applications like small parts material handling or simple machining. The reason for this is that the RLL logic required for these applications tends be very small and highly reusable because the I/O count is minimal and interactions between modules are simplistic.
Unfortunately, there are many areas of industrial control for which it is particularly difficult to provide reusable language modules due to relatively large and varying job specific I/O requirements and the complexity and variability of interaction between modules.
One area of industrial control that defies the predefined language module approach is sequential control. Sequential control is the synchronization of individual tool movements and other subordinate processes to achieve a precisely defined sequence of machining operations. While it may be easy to enumerate all of the possible sequences involving just a few simple tool movements, the number of possibilities increases rapidly as the number and complexity of the tool movements increases, to the point where any attempt to enumerate them all is futile.
For example, a typical machine station configuration may include five different tools, each of which performs six different movements for a total of thirty movements. In this case, each tool movement must be made dependent on the position of an associated tool. In many cases, movement of a tool must also be conditioned upon positions of all other tools at the station. In addition, tool movements at one station are often tied to tool movements at other stations or the completion of some portion of a cycle at some other station. Furthermore, tool movement may also be conditioned upon the states of manual controls.
Taking into account the large number of machine line tools, tool movements, manual control types, manual control configurations, and cross-station contingencies that are possible, the task of providing an all encompassing module library capable of synchronizing tool movements becomes impractical. Even if such a library could be fashioned, the task of choosing the correct module to synchronize station tools would probably be more difficult than programming required RLL logic from scratch.
For these reasons, although attempts have been made at providing comprehensive language module libraries, none of the libraries has proven successful at providing comprehensive logic to synchronize tool movements. In addition, none of the libraries has made automated RLL programming a reality. Thus, typically synchronization programming in RLL is still done from scratch.
Therefore, in order to reduce programming time and associated costs, it would be advantageous to have a more flexible means of specifying control logic for controlling machine sequences. It would be advantageous if such a means enabled less skilled programmers to provide sequential control logic. Furthermore, it would be advantageous if reusable logic templates, comprising the basic components of a sequential control program, could be composed into a library of templates that would be employed to produce sequential control logic with consistent behavior and form. Moreover, it would be advantageous if such a library of templates could be accessed using a programming apparatus such as a personal computer, or the like, to further minimize programming time required to program machine sequential control in RLL.